package org.ehe.finance.payable.domain.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 应付VO
 * @author :zhangnn
 * @className :PayableResponseVO
 * @description: TODO
 * @date 2025-09-02 10:22:12
 */
@Data
public class PayableResponseVO {
    /**
     * 主键ID
     */
    private Long id;
    /**
     * 单据编号不能为空
     */
    private String billNo;
    /**
     * 供应商名称
     */
    private String supplierName;
    /**
     * 单据日期不能为空
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate billDate;

    /**
     * 单据类型名称（如：采购应付、费用应付等）
     */
    private String billTypeName;
    /**
     * 来源单据号（关联的上游业务单据编号）
     */
    private String sourceBillNo;
    /**
     * 应付总金额（本次应付的总金额）
     */
    private BigDecimal totalAmount;
    /**
     * 已付款金额（该单据已支付的金额）
     */
    private BigDecimal paidAmount;
    /**
     * 未付款金额（应付总金额减去已付款金额的余额）
     */
    private BigDecimal unpaidAmount;

    /**
     * 到期日期（付款截止日期）
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate dueDate;
    /**
     * 币种编码（如：CNY、USD等）
     */
    private String currencyCode;
    /**
     * 汇率（该币种相对于本位币的汇率）
     */
    private BigDecimal exchangeRate;
    /**
     * 部门名称（负责该应付单据的部门）
     */
    private String departmentName;
    /**
     * 采购人员名称（对应采购业务的经办人）
     */
    private String purchaserName;
    /**
     * 结算状态名称（如：未结算、部分结算、已结算等）
     */
    private String settlementStatusName;
    /**
     * 备注信息（单据相关的补充说明）
     */
    private String remark;

    /**
     * 创建时间（单据的创建时间）
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    /**
     * 更新时间（单据最后一次修改时间）
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;

    /**
     * 扩展字段：逾期天数
     * （当前日期减去到期日期的天数，若为负数则表示未逾期）
     */
    private Integer overdueDays;
    /**
     * 扩展字段：紧急程度
     * （根据逾期天数或其他规则判定的紧急级别，如：紧急、一般、低等）
     */
    private String urgencyLevel;

}
